package com.solace.thumbnailator.utils;

import cn.hutool.core.img.Img;
import lombok.Data;

import java.awt.*;

@Data
public class DrawFont {
    // 注释 文字写入模式(超出长度省略)
    public static final int FON_TOMIT = 1;
    // 注释 文字写入模式(超出长度换行)
    public static final int FONT_NEWLINE = 2;
    // 注释 文字写入模式(不处理)
    public static final int FONT_DEFLUT = 3;
    //1=头像合成  2=文字合成  3=图片合成
    public static final int TYPE_LOGO = 1;
    public static final int TYPE_FONT = 2;
    public static final int TYPE_IMG = 3;


    /*================================公共部分==============================*/
    //坐标
    private Point point;
    //素材
    private Img img;
    //类型 1=头像合成  2=文字合成  3=图片合成
    private int type;
    /*================================文本类==============================*/
    //文本
    private String text;
    //字体
    private Font font;
    //颜色
    private Color color;

    //写入字体模式
    private int fontMode = FONT_DEFLUT;
    //一行最大长度(像素)
    private int widthLength;
    //选择超长换行模式下,微调行距
    private int height;
    /*================================图片合成类==============================*/
    //倒角
    private double round;
    //图片合成长宽比
    private int w;
    private int h;
    /*================================头像类==============================*/
    //头像半径(像素)
    private int radius;

    /** 绘制文字 文字位置左下角
     * @param text  绘制文字
     * @param font  绘制字体
     * @param color 绘制颜色
     * @param point 绘制坐标
     */
    public DrawFont(String text, Font font, Color color, Point point) {
        this.text = text;
        this.font = font;
        this.color = color;
        this.point = point;
        this.type = TYPE_FONT;
    }

    /**
     * 绘制文字 文字位置左下角
     * @param text        绘制文字
     * @param font        绘制字体
     * @param color       绘制颜色
     * @param point       绘制坐标
     * @param fontMode    超长绘制模式
     * @param widthLength 一行文字限制(像素)
     */
    public DrawFont(String text, Font font, Color color, Point point, int fontMode, int widthLength) {
        this.text = text;
        this.font = font;
        this.color = color;
        this.point = point;
        this.fontMode = fontMode;
        this.widthLength = widthLength;
        this.type = TYPE_FONT;
    }

    /**
     * 绘制文字 文字位置左下角
     * @param text        绘制文字
     * @param font        绘制字体
     * @param color       绘制颜色
     * @param point       绘制坐标
     * @param fontMode    超长绘制模式
     * @param widthLength 一行文字限制(像素)
     * @param height      微调行距
     */
    public DrawFont(String text, Font font, Color color, Point point, int fontMode, int widthLength, int height) {
        this.text = text;
        this.font = font;
        this.color = color;
        this.point = point;
        this.fontMode = fontMode;
        this.widthLength = widthLength;
        this.height = height;
        this.type = TYPE_FONT;
    }

    /**
     * 方形图片合成
     * @param point         合成图片坐标
     * @param img 合成文件源文件
     * @param w             合成图片宽
     * @param h             合成图片高
     */
    public DrawFont(Point point, Img img, int w, int h) {
        this.point = point;
        this.img = img;
        this.w = w;
        this.h = h;
        this.type = TYPE_IMG;
    }
    /**
     * 方形图片合成
     * @param point         合成图片坐标
     * @param img 合成文件源文件
     * @param w             合成图片宽
     * @param h             合成图片高
     * @param round    倒角0-1之间
     */
    public DrawFont(Point point, Img img, int w, int h,double round) {
        this.point = point;
        this.img = img;
        this.w = w;
        this.h = h;
        this.round = round;
        this.type = TYPE_IMG;
    }

    /**
     * 圆形图片合成
     * @param point 位置
     * @param img 素材
     * @param radius 背景半径(像素)
     */
    public DrawFont(Point point,Img img, int radius) {
        this.point = point;
        this.img = img;
        this.radius = radius;
        this.type = TYPE_LOGO;
    }

}
